/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package rukopisyimport.sourceData;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;
import java.util.logging.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;

/**
 *
 * @author Martin Rehanek (rehan@mzk.cz)
 */
public class TeiDocument extends MetadataDocument {

    private static final Logger logger = Logger.getLogger(TeiDocument.class.getName());
    private static final String ID_PREFIX = "id_";

    public TeiDocument(File file) throws FileNotFoundException, DocumentException {
        super(file);
    }

    public TeiDocument(Document doc) {
        super(doc);
    }

    public List<Node> findMsItems() {
        String xpath = "//tei:msItem";
        return findNodes(xpath);
    }

    public String findSignature() {
        String xpath = "/tei:TEI/tei:teiHeader/tei:fileDesc/tei:sourceDesc/tei:msDesc/tei:msIdentifier/tei:idno";
        return findValue(xpath);
    }

    public boolean isDigitalized() {
        String xpath = "/tei:TEI/tei:facsimile/tei:surface";
        List<Node> pages = findNodes(xpath);
        return !pages.isEmpty();
    }

    public String findUrlBase() {
        String xpath = "/tei:TEI/tei:facsimile/@xml:base";
        return findValue(xpath);
    }

    public List<Node> findPageNodeList() {
        String xpath = "/tei:TEI/tei:facsimile/tei:surface";
        return findNodes(xpath);
    }

    public String pageLabel(Node surfaceNode) {
        String xpathString = "./tei:desc/tei:label";
        return findValue(xpathString, surfaceNode);
    }

    public String pageUrlSuffix(Node surfaceNode) {
        String xpathString = "./tei:graphic[1]/@url";
        String url = findValue(xpathString, surfaceNode);
        String[] tokens = url.split("/");
        String imageFile = tokens[tokens.length - 1];
        return imageFile.substring(0, imageFile.length() - ".jpg".length());
    }

    public String pageId(Node surfaceNode) {
        String xpathString = "./@xml:id";
        return findValue(xpathString, surfaceNode);
    }

    public Integer pageNumberFromLabel(Node surfaceNode) {
        return findPageNumber(surfaceNode, "./tei:desc/tei:label", "");
    }

    public Integer pageNumberFromSurfaceId(Node surfaceNode) {
        return findPageNumber(surfaceNode, "./@xml:id", ID_PREFIX);
    }

    private Integer findPageNumber(Node surfaceNode, String xpathString, String prefix) {
        String id = findValue(xpathString, surfaceNode);
        try {
            return Integer.parseInt(id.substring(prefix.length()));
        } catch (NumberFormatException ex) {
            return null;
        }
    }
}
